/*
 * Socket.h
 *
 *  Created on: 19/10/2009
 *      Author: Emiliano Orlando
 */

#ifndef SOCKET_H_
#define SOCKET_H_

#include <string>
#include <iostream>
#include <cstring>
#include <stdio.h>
#include <stdlib.h> 
#include <unistd.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <signal.h>
#include <arpa/inet.h>
#include <sys/wait.h>
#include <sys/time.h>

#define BACKLOG 15
#define MAXDATATRANS 10000
#define TIMEOUT 5

/*Encapsulado de Socket*/
class Socket {
private:
	int fd;
	bool valido;
	Socket(int fd);

public:
	std::string bufferAux;

	Socket();
	virtual ~Socket(){};
	int bind(int puerto);
	int connect(const char* host, int puerto);
	int listen();
	Socket* accept();
	int shutdown(int how);//how=2->send & recive disallowed
	int close();
	int send(char* msj, int len);
	int recvtimeout(std::string& stream);
	int recive(std::string& stream);

	/*is_valid: el atributo valido se setea en falso si al
	*	llamar al pedir un socket el SO nos lo niega.*/	
	bool is_valid(){return valido;};
};



#endif /* SOCKET_H_ */
